/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.edu.pucp.Seguridad.Controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import pe.edu.pucp.Modelo.EstadoPerfil;
import pe.edu.pucp.Modelo.Perfil;
import pe.edu.pucp.Modelo.Permiso;
import pe.edu.pucp.Modelo.Usuario;
import pe.edu.pucp.Seguridad.DAO.PerfilDAO;
import pe.edu.pucp.Seguridad.Vista.BuscarPerfilGUI;
import pe.edu.pucp.Seguridad.Vista.PerfilGUI;
import pe.edu.pucp.Util.Constante;
import pe.edu.pucp.Util.LogHelper;
import pe.edu.pucp.Util.ValHelper;
import sigepa.MainController;

/**
 *
 * @author jorge
 */
public class BuscarPerfilControlador {
    private PerfilDAO m;
    private BuscarPerfilGUI view ;
    private MainController mcont ;
    private Usuario usract;
    private ArrayList<Perfil> lstPerfil;
    private ArrayList<EstadoPerfil> lstEstado;

    
    public BuscarPerfilControlador(PerfilDAO dao, BuscarPerfilGUI v, Usuario user,MainController mc){
        m = dao;
        view = v;
        mcont=mc;
        usract =user;
        view.mostrarPermisos(new  ArrayList<Permiso>(usract.getPerfil().getPermisos()));
        llenarEstadoCombo();

        lstPerfil = m.listarPerfil();               
        view.llenaGrilla(lstPerfil);        
        
        view.addBuscarListener(new buscarPerfiles() );
        view.addEliminarListener(new eliminarListener() );
        view.addActivarListener(new activarListener()); 
        view.addEditarListener(new editarPerfilListener(this) );
        view.addLimpiarListener(new limpiarListener() );
        view.addNuevoListener(new crearPerfilListener(this));
    }
    
    private void llenarEstadoCombo(){
            lstEstado = m.listarEstado();
            view.llenaComboEstado(lstEstado);
    }       
    
    public void listarResultados(){
        lstPerfil = m.listarPerfil();           
        view.llenaGrilla(lstPerfil);        
    }    
    
    class buscarPerfiles implements ActionListener
    {
        @Override
        public void actionPerformed(ActionEvent e) {
            int estd = view.getEstado()<0? -1: lstEstado.get(view.getEstado()).getIdestado();
            lstPerfil = m.listarPerfil(estd,view.getNombre());               
            view.llenaGrilla(lstPerfil);   
        }
    }
    
    class crearPerfilListener implements ActionListener {
        
        private BuscarPerfilControlador bpf;
        public crearPerfilListener(BuscarPerfilControlador buscarper){
            bpf=buscarper;
        }
                
        @Override
        public void actionPerformed(ActionEvent e) {
            PerfilGUI p = new PerfilGUI(view.getPadre(), true);
            PerfilControlador c = new PerfilControlador (m,p,bpf,null,usract);
            p.setVisible(true);
        }
    
    } 

    
    class editarPerfilListener implements ActionListener {
        
        private BuscarPerfilControlador bpf;
        public editarPerfilListener(BuscarPerfilControlador buscarper){
            bpf=buscarper;
        }
        @Override
        public void actionPerformed(ActionEvent e) {            
            int sel=view.getFilaSel();
            if (sel!=-1){
                PerfilGUI p = new PerfilGUI(view.getPadre(), true);
                Perfil u = lstPerfil.get(sel);                
                PerfilControlador c = new PerfilControlador (m,p,bpf,u,usract);
                p.setVisible(true);                
            }
            else{
                ValHelper.mostrarError("Debe seleccionar un perfil");
            }            
        }
    
    }     
    
    class limpiarListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            view.LimpiarDatos();
            listarResultados();
        }        
    }      
    
    class eliminarListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            int sel=view.getFilaSel();
            if (sel!=-1){
                if (ValHelper.solicitarConfirmacion("¿Desea inactivar este perfil? \n Los usuarios asignados a este perfil no podrán ingresar al sistema")==0){
                    Perfil p = lstPerfil.get(sel);
                    EstadoPerfil est = m.buscarEstado(Constante.ESTADO_PERFIL_INACTIVO); 
                    p.setEstadoPerfil(est);
                    m.modificarPerfil(p);
                    LogHelper.registrarOperacion(usract, Constante.ACCION_INACTIVAR, Constante.OBJETO_PERFIL, "Se inactivó el perfil "+p.getDescripcion());
                    ValHelper.mostrarAviso("Se inactivó el perfil con éxito");
                    listarResultados();
                }
            }
            else{
                ValHelper.mostrarError("Debe seleccionar un perfil");
            }
        }        
    }    
    
    class activarListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            int sel=view.getFilaSel();
            if (sel!=-1){
                if (ValHelper.solicitarConfirmacion("¿Desea reactivar este perfil?")==0){
                    Perfil p = lstPerfil.get(sel);
                    EstadoPerfil est = m.buscarEstado(Constante.ESTADO_PERFIL_ACTIVO); 
                    p.setEstadoPerfil(est);
                    m.modificarPerfil(p);
                    LogHelper.registrarOperacion(usract, Constante.ACCION_REACTIVAR, Constante.OBJETO_PERFIL, "Se reactivó el perfil "+p.getDescripcion());
                    ValHelper.mostrarAviso("Se reactivó el perfil con éxito");
                    listarResultados();
                }
            }
            else{
                ValHelper.mostrarError("Debe seleccionar un perfil");
            }
        }        
    }     
}
